package net.example.model;

/**
 * Created by ZN on 2015/12/4.
 */
public enum ContractType {

    /**
     * 重置密码
     */
    ResetPassword  (20),

    /**
     * 获取用户手机号码（C->S）
     */
    GetUserPhone(22),

    /**
     * 修改已绑定的电话号码（C->S）
     */
    ChangeMyPhone(23),

    /**
     * 聊天消息
     */
    CHAT(1000),

    /**
     * 抖动
     */
    Vibration(1001),
    /**
     * 关于视频/语音/远程协助的沟通
     */
    MediaCommunicate(1002),
    /**
     * 通知对方自己正在输入 （C->C）
     */
    InputingNotify(1003),
    /**
     * 请求离线消息 （C->S）
     */
    GetOfflineMessage(1004),
    /**
     * 服务端转发离线消息给客户端 （S->C）
     */
    OfflineMessage(1005),

    /**
     * 请求离线文件 （C->S）
     */
    GetOfflineFile(1006),

    /**
     * 通知发送方，对方是接收了离线文件，还是拒绝了离线文件。（S->C）
     */
    OfflineFileResultNotify(1007),

    /**
     *推送的系统消息。C->S、S->C
     */
    SystemMessage(1008),

    /**
     * 发送语音
     */
    AudioMessage(1010),

    /**
     * 获取用户资料（C->S）
     */
    GetUserInfo(1021),
    /**
     * 修改自己的基础个人资料（C->S）
     */
    ChangeMyBaseInfo(1022),
    /**
     * 通知某人的基础资料发生了变化（S->C）
     */
    UserBaseInfoChanged(1023),
    /**
     * 修改自己的头像（C->S）
     */
    ChangeMyHeadImage(1024),
    /**
     * 用户头像发生变化。
     */
    UserHeadImageChanged(1025),
    /**
     * 获取指定某些用户的资料（C->S）
     */
    GetSomeUsers(1026),
    /**
     * 修改状态（C->S）
     */
    ChangeStatus(1027),
    /**
     * 通知某人状态发生了变化（S->C）
     */
    UserStatusChanged(1028),

    /**
     * 修改密码（C->S）
     */
    ChangePassword(1029),
    /**
     * 修改好友/群的备注名称（C->S）。
     */
    ChangeUnitCommentName(1030),
    /**
     * 修改自己的业务资料（C->S）
     */
    ChangeMyBusinessInfo(1031),
    /**
     * 通知某人的业务资料发生了变化（S->C）
     */
    UserBusinessInfoChanged(1032),
    /**
     * 获取用户新版本资料（C->S）。如果已经是最新，则服务器返回null。
     */
    GetUserInfoNewVersion(1033),

    /**
     * 当有新用户注册时，通知其它用户，适用ggTalkMode.Enterprise模式。（S->C）
     */
    SomeoneRegisteredNotify(1040),
    /**
     *  获取我的所有好友ID（C->S）
     */
    GetFriendIDList(1041),

    /**
     * 获取我的所有联系人资料（C->S）
     */
    GetAllContacts(1042),

    /**
     * 添加好友（C->S）
     */
    AddFriend(1043),
    /**
     * 删除好友（C->S）
     */
    RemoveFriend(1044),
    /**
     * 通知客户端其被对方从好友中删除（S->C）
     */
    FriendRemovedNotify(1045),
    /**
     * 通知客户端其被对方添加为好友（S->C）
     */
    FriendAddedNotify(1046),
    /**
     * 查询服务器自己是否位于对方的黑名单中（C->S）
     */
    InHisBlackList(1047),
    /**
     * 添加好友分组（C->S）
     */
    AddFriendCatalog(1048),
    /**
     * 修改好友分组名称（C->S）
     */
    ChangeFriendCatalogName(1049),
    /**
     *  删除好友分组（C->S）
     */
    RemoveFriendCatalog(1050),
    /**
     *  移动好友到别的分组（C->S）
     */
    MoveFriendToOtherCatalog(1051),
    /**
     * 获取我的所有联系人的在线状态、版本号，以及我的所有组的版本号（C->S）
     */
    GetContactsRTData(1052),

    /**
     * 获取我的所有联系人ID（C->S）
     */
    GetAllContactIDs(1054),
    /**
     * 删除用户。
     */
    DeleteUser(1055),
    /**
     * 用户被删除时，通知其相关联系人
     */
    SomeoneDeletedNotify(1056),
    /**
     * 获取我的所有组资料（C->S）
     */
    GetMyGroups(1060),
    /**
     * 获取指定的某些组的资料（C->S）
     */
    GetSomeGroups(1061),
    /**
     * 加入组（C->S）
     */
    JoinGroup(1062),
    /**
     * 获取组资料（C->S）
     */
    GetGroup(1063),
    /**
     * 创建组（C->S）
     */
    CreateGroup(1064),
    /**
     * 退出组（C->S）
     */
    QuitGroup(1065),
    /**
     * 解散组（C->S）
     */
    DeleteGroup(1066),
    /**
     * 编辑组成员
     */
    ChangeGroupMembers(1067),
    /**
     * 修改组资料（名称、公告）
     */
    ChangeGroupInfo(1068),

    /*
    *  聊天信息转发
    * */
    ChatTransfered(1071),
    /**
     * 申请添加好友。
     */
    RequestAddFriend(1072),
    /**
     * 处理申请添加好友。
     */
    HandleAddFriendRequest(1073),

    /*
    * 获取申请添加好友的分页
    * */
    GetAddFriendPage(1074),

    /*
     * 申请加入讨论组。
     * */
    RequestAddGroup(1075),

    /*
     * 处理加入讨论组申请
     * */
    HandleAddGroupRequest(1076),

    /*
     * 获取加入讨论组申请的分页
     * */
    GetAddGroupPage(1077),

    /*
     * 查询讨论组（ID或Name 精确查询）
     * */
    SearchGroup(1078),

    /**
     * 从DB中根据群ID或群名称精确查找用户
     * */
    SearchUser(1079),

    /**
     * 群聊天
     */
    GroupChat(1080),
    /**
     * 某用户加入组
     */
    SomeoneJoinGroup(1081),
    /**
     * 某用户退出组
     */
    SomeoneQuitGroup(1082),
    /**
     * 组被解散
     */
    GroupDeleted(1083),
    /**
     * 组资料被修改
     */
    GroupInfoChanged(1084),
    /**
     * 某些人被拉入群。
     */
    PulledIntoGroupNotify(1085),

    /**
     * 某些人被移除群。
     */
    RemovedFromGroupNotify(1086),

    /**
     * 群禁言（针对具体群成员）
     * */
    GroupBan4User(1087),
    /**
     * 解除群禁言（针对具体群成员）
     * */
    RemoveGroupBan4User(1088),
    /**
     * 检查当前用户是否存在群禁言,若存在，会收到GroupBan4User的消息
     * */
    CheckGroupBan4CurrentUser(1089),
    /**
     * 获取群组中所有正在禁言的记录
     * */
    GetGroupBans4Group(1090),
    /**
     * 该组是否存在全局禁言
     * */
    ExistAllGroupBan(1091),
    /**
     * 开启全群禁言（管理员除外）
     * */
    GroupBan4Group(1092),
    /**
     * 关闭全群禁言
     * */
    RemoveGroupBan4Group(1093),

    /**
     *阅后即焚 消息
     * */
    Snapchat(1100),

    /**
     *自焚消息已被阅读
     * */
    SnapchatRead(1101),

     /**
      *  用户状态已改变 S-> C
      *  */
    UserStateChanged  (1111),
    /**
     *  请求群离线消息 （C->S）
     *  */
    GetGroupOfflineMessage(1112),
    /**
     *  服务端转发群离线消息给客户端 （S->C）
     *  */
    GroupOfflineMessage(1113);
    private int type;

    public static ContractType getContractTypeByCode(int code) {
        for (ContractType type : ContractType.values()) {
            if (type.getType() == code) {
                return type;
            }
        }
        return null;
    }

    ContractType(int type) {
        this.type = type;
    }

    public int getType() {
        return type;
    }
}
